home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK1.toast / Development Kits (Disc 1) / AOCE / Development Tools / Sample Code / Standard Catalog Package / AddressOMini / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-06-28  |  2.7 KB  |  148 lines  |  [TEXT/MPS ]

  1. #ifndef __TRAPS__
  2. #include <Traps.h>
  3. #endif
  4.  
  5. #ifndef __GESTALTEQU__
  6. #include <GestaltEqu.h>
  7. #endif
  8.  
  9. #ifndef __MEMORY__
  10. #include <Memory.h>
  11. #endif
  12.  
  13. #ifndef __FONTS__
  14. #include <Fonts.h>
  15. #endif
  16.  
  17. #ifndef __OSEVENTS__
  18. #include <OSEvents.h>
  19. #endif
  20.  
  21. #ifndef __MENUS__
  22. #include <Menus.h>
  23. #endif
  24.  
  25. #ifndef __OCE__
  26. #include <OCE.h>
  27. #endif
  28.  
  29. #ifndef __OCESTANDARDDIRECTORY__
  30. #include <OCEStandardDirectory.h>
  31. #endif
  32.  
  33. #ifndef __OCETEMPLATES__
  34. #include <OCETemplates.h>
  35. #endif
  36.  
  37. #include "trapavailable.h"
  38. #include "AddressOMini.h"
  39.  
  40. #ifndef _GestaltDispatch
  41. #define    _GestaltDispatch    _Gestalt
  42. #endif
  43.  
  44. #define    kMaxPathParts    64
  45. #define    kLocalIDPrompt    "\pPlease enter the password for your master key"
  46. #define    kUserCancelled    -1
  47.  
  48. AuthIdentity gIdentity;
  49.  
  50. void main(void);
  51. Boolean HasAOCE(void);
  52. OSErr AuthenticateLocal(void);
  53. OSErr GetRecipients(SMPRecipientDescriptorPtr *recipList);
  54.  
  55.  
  56. void main(void)
  57. {
  58.     OSErr err;
  59.     SMPRecipientDescriptorPtr recipList;
  60.     
  61.     if (!HasAOCE())
  62.         ExitToShell();
  63.     
  64.     MaxApplZone();
  65.     InitGraf(&qd.thePort);
  66.     InitFonts();
  67.     InitWindows();
  68.     InitMenus();
  69.     TEInit();
  70.     InitDialogs(nil);
  71.     InitCursor();
  72.     FlushEvents(everyEvent,0);
  73.     
  74.     err = AuthenticateLocal();
  75.     if (err==noErr)
  76.         err = GetRecipients(&recipList);
  77. }
  78.  
  79.  
  80. Boolean HasAOCE(void)
  81. {
  82.     OSErr err;
  83.     long response;
  84.     
  85.     if (!TrapAvailable(_GestaltDispatch))
  86.         return false;
  87.     
  88.     err = Gestalt(gestaltOCEToolboxAttr,&response);
  89.     if (err!=noErr)
  90.         return false;
  91.         
  92.     return (response && (response << gestaltOCETBAvailable));
  93. }
  94.  
  95.  
  96. OSErr AuthenticateLocal(void)
  97. {
  98.     OSErr err;
  99.     SDPIdentityKind idKind;
  100.     AuthGetLocalIdentityPB pBlock;
  101.     
  102.     err = AuthGetLocalIdentity((AuthParamBlockPtr)&pBlock,false);
  103.  
  104.     if (err!=noErr)
  105.         err = SDPPromptForID(&gIdentity,nil,nil,kLocalIDPrompt,nil,kSDPLocalIdentityMask,&idKind,nil,0);
  106.     else
  107.         gIdentity = pBlock.theLocalIdentity;
  108.         
  109.     return err;
  110. }
  111.  
  112.  
  113. OSErr GetRecipients(SMPRecipientDescriptorPtr *recipList)
  114. {
  115.     PackedDSSpecPtr packedReply;
  116.     OSErr err;
  117.     RString addressCategory;
  118.     unsigned short numTypes;
  119.     PackedRStringListHandle catTypes;
  120.     RString *typeList[kMaxPathParts];
  121.     unsigned char hState;
  122.     Boolean gotAddress;
  123.     
  124.     /* display address records */
  125.     
  126.     OCECToRString(kDETCategoryAddressItems,smRoman,&addressCategory,kRStringMaxBytes);
  127.     err = SDPGetCategoryTypes(&addressCategory,&catTypes);
  128.     if (err!=noErr)
  129.         return err;
  130.     hState = HGetState((Handle)catTypes);
  131.     HLock((Handle)catTypes);
  132.     numTypes = OCEUnpackPathName(*catTypes,typeList,kMaxPathParts);    
  133.  
  134.     gotAddress = AddressOMini(&packedReply,typeList,numTypes,gIdentity,
  135.             kEnumDistinguishedNameMask|kEnumAliasMask|kEnumDNodeMask,"\pSend file to:");
  136.  
  137.     HSetState((Handle)catTypes,hState);
  138.     if (!gotAddress)
  139.         return kUserCancelled;
  140.     
  141.     if (packedReply) {
  142.         err = SMPResolveToRecipient(packedReply,recipList,gIdentity);
  143.         DisposPtr((Ptr)packedReply);
  144.     }
  145.  
  146.     return err;
  147. }
  148.